/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2022-12-14
 * Time: 19:53
 */
public class Solution {
    //DP dp[i],由max*nums[i],min*nums[i],nums[i]中的最大值决定
    public int maxProduct(int[] nums){
        int ans=nums[0];
        //因为负负得正,所以要同时记录最大值和最小值
        int max=nums[0];
        int min=nums[0];
        for(int i=1;i<nums.length;i++){
            int temp=max;//要先记录一下max的值,因为后面max的值变化了,所以求min时就出错了
            max=Math.max(Math.max(max*nums[i],min*nums[i]),nums[i]);
            min=Math.min(Math.min(temp*nums[i],min*nums[i]),nums[i]);
            ans=Math.max(max,ans);
        }
        return ans;
    }
}
